﻿using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using eepg_contratos.Models;
using eepg_contratos.Utilities;
using System.IO;
using System.Collections;

namespace eepg_contratos.Controllers
{
    public class ContratosController : Controller
    {
        AppUtil u = new AppUtil();

        public ActionResult ListadoContratos()
        {
            return View();
        }

        public ActionResult AgregarContrato()
        {
            return View();
        }

        [ValidateInput(false)]
        public void Exportar(String titulo, String contenido, String nombre)
        {
            string attachment = "attachment; filename=" + nombre + ".xls";
            Response.ClearContent();
            Response.AddHeader("content-disposition", attachment);
            Response.ContentType = "application/vnd.ms-excel";
            Response.Write(contenido);
            Response.End();
        }

        public String ConsultarAction(String contrato)
        {
            String data = "";
            ContratoServices cs = new ContratoServices();
            ArrayList arr = new ArrayList();
            arr = cs.Consultar(contrato);
            data = u.ContratoArrayToXml(arr);

            return data;
        }

        public void ConsultarArchivo(String contrato, String guid)
        {
            ContratoServices cs = new ContratoServices();
            ArrayList arr = new ArrayList();
            ArchivoModel a = cs.ConsultarArchivo(contrato, guid);
            if (a.archivo == null)
            {
                Response.Clear();

                Response.AddHeader("content-disposition", string.Format("attachment;filename={0}", "sin datos"));
                Response.ContentType = "application/octet-stream";
                Response.End();
            }
            else
            {
                Response.Clear();

                Response.AddHeader("content-disposition", string.Format("attachment;filename={0}", a.nombre_archivo));
                Response.ContentType = "application/octet-stream";

                Response.BinaryWrite(a.archivo);
                Response.End();

            }
        }

        public String EliminarFiscalizador(String guid)
        {
            FiscalizadorModel a = new FiscalizadorModel();
            ContratoServices cs = new ContratoServices();
            a.guid = Request.Form["guid"];
            cs.EliminarFiscalizador(a);

            return "";
        }

        public String EliminarArchivo(String contrato, String guid)
        {
            ArchivoModel a = new ArchivoModel();
            ContratoServices cs = new ContratoServices();
            a.contrato = Request.Form["contrato"];
            a.guid = Request.Form["guid"];
            cs.EliminarArchivo(a);

            return "";
        }

        public String EliminarActividad(String guid)
        {
            ActividadModel a = new ActividadModel();
            ContratoServices cs = new ContratoServices();
            a.guid = Request.Form["guid"];
            cs.EliminarActividad(a);

            return "";
        }

        public String EliminarPago(String guid)
        {
            PagoModel a = new PagoModel();
            ContratoServices cs = new ContratoServices();
            a.guid = Request.Form["guid"];
            cs.EliminarPago(a);

            return "";
        }

        public String EliminarProrroga(String guid)
        {
            ProrrogaModel a = new ProrrogaModel();
            ContratoServices cs = new ContratoServices();
            a.guid = Request.Form["guid"];
            cs.EliminarProrroga(a);

            return "";
        }

        public String EliminarGarantia(String guid)
        {
            GarantiaModel a = new GarantiaModel();
            ContratoServices cs = new ContratoServices();
            a.guid = Request.Form["guid"];
            cs.EliminarGarantia(a);

            return "";
        }

        public String ListarAction()
        {
            String html = "";
            String filtro = "";
            DataTable dt = new DataTable();
            ContratoServices cs = new ContratoServices();
            ContratoModel c = new ContratoModel();

            c.contrato = Request.Form["contrato"];
            c.proceso = Request.Form["proceso"];
            c.fecha_susc_ini = Request.Form["fecha_susc_ini"];
            c.fecha_susc_fin = Request.Form["fecha_susc_fin"];
            c.fecha_ing_ini = Request.Form["fecha_ing_ini"];
            c.fecha_ing_fin = Request.Form["fecha_ing_fin"];
            c.tipo = Request.Form["tipo"];
            c.id_estado = Request.Form["id_estado"];
            c.descripcion = Request.Form["descripcion"];
            c.id_gerencia = Request.Form["gerencia"];
            
            filtro = u.sqlFilter(c);
            dt = cs.Listar(filtro);
            String resultados = "<h3>Resultados encontrados : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tableResultados");

            return html;
        }

        public String ListarFiscalizadoresAction()
        {
            String html = "";
            DataTable dt = new DataTable();
            ContratoServices cs = new ContratoServices();
            FiscalizadorModel c = new FiscalizadorModel();

            c.contrato = Request.Form["contrato"];

            dt = cs.ListarFiscalizadores(c.contrato);
            String resultados = "<h3>Registros encontrados : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tableFiscalizadores");

            return html;
        }

        public String ListarActividadesAction()
        {
            String html = "";
            DataTable dt = new DataTable();
            ContratoServices cs = new ContratoServices();
            ActividadModel c = new ActividadModel();

            c.contrato = Request.Form["contrato"];

            dt = cs.ListarActividades(c.contrato);
            String resultados = "<h3>Registros encontrados : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tableActividades");

            return html;
        }

        public String ListarArchivosAction()
        {
            String html = "";
            DataTable dt = new DataTable();
            ContratoServices cs = new ContratoServices();
            ArchivoModel c = new ArchivoModel();

            c.contrato = Request.Form["contrato"];
            c.tipo = Request.Form["tipo"];

            dt = cs.ListarArchivos(c.contrato, c.tipo);
            String resultados = "<h3>Registros encontrados : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tableAnexos");

            return html;
        }

        public String ListarPagosAction()
        {
            String html = "";
            DataTable dt = new DataTable();
            ContratoServices cs = new ContratoServices();
            PagoModel c = new PagoModel();

            c.contrato = Request.Form["contrato"];

            dt = cs.ListarPagos(c.contrato);
            String resultados = "<h3>Registros encontrados : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tablePagos");

            return html;
        }

        public String ListarPagosCGWEBAction()
        {
            String html = "";
            DataTable dt = new DataTable();
            ContratoServices cs = new ContratoServices();
            ContratoModel c = new ContratoModel();

            c.id = Request.Form["id"];

            dt = cs.ListarPagosCGWEB(c.id);
            String resultados = "<h3>Registros encontrados : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tablePagos");

            return html;
        }

        public String ListarProrrogasAction()
        {
            String html = "";
            DataTable dt = new DataTable();
            ContratoServices cs = new ContratoServices();
            ProrrogaModel c = new ProrrogaModel();

            c.contrato = Request.Form["contrato"];

            dt = cs.ListarProrrogas(c.contrato);
            String resultados = "<h3>Registros encontrados : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tableProrrogas");

            return html;
        }

        public String ListarGarantiasAction()
        {
            String html = "";
            DataTable dt = new DataTable();
            ContratoServices cs = new ContratoServices();
            GarantiaModel c = new GarantiaModel();

            c.contrato = Request.Form["contrato"];

            dt = cs.ListarGarantias(c.contrato);
            String resultados = "<h3>Registros encontrados : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tableGarantias");

            return html;
        }

        public String ListarGarantiasCGWEBAction()
        {
            String html = "";
            DataTable dt = new DataTable();
            ContratoServices cs = new ContratoServices();
            ContratoModel c = new ContratoModel();

            c.id = Request.Form["id"];

            dt = cs.ListarGarantiasCGWEB(c.id);
            String resultados = "<h3>Registros encontrados : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tableGarantias");

            return html;
        }

        public String ListarHistorialAction(String contrato, String proceso) 
        {
            String html = "";
            DataTable dt = new DataTable();
            ContratoServices cs = new ContratoServices();

            String filtro = "";

            if (contrato.Trim().Length > 0)
            {
                filtro += " and (CODIGO_CONTRATO like '%" + contrato.ToUpper() + "%' or CODIGO_CONTRATO like '%" + contrato + "%' or CODIGO_CONTRATO like '%" + contrato.ToLower() + "%') ";
            }

            if (proceso.Trim().Length > 0)
            {
                filtro += " and (OBSERVACION like '%" + proceso.ToUpper() + "%' or OBSERVACION like '%" + proceso + "%' or OBSERVACION like '%" + proceso.ToLower() + "%') ";
            }

            String sql = "SELECT " + 
                "CODIGO_CONTRATO CONTRATO, " + 
                "OBSERVACION PROCESO, " + 
                "CONTRATISTA RUC, " +
                "DESC_CONTRATISTA CONTRATISTA, " + 
                //"DESC_REPRE_CONTRA REPRESENTANTE, " +
                "OBJETO_CONTRATO, " +  
                "MONTO_CONTRATO, " + 
                "DESADMINISTRADOR ADMINISTRADOR, " +
                "DESFISCALIZADOR FISCALIZADOR,  " +
                "DESGERENCIA_SOLICITANTE GERENCIA," +
                "to_char(FECHA_SUSCRIPCION, 'rrrr-mm-dd') FECHA_SUSCRIPCION, " +
                "to_char(FECHA_CULMINACION, 'rrrr-mm-dd') FECHA_CULMINACION, " +
                "PLAZO " + 
                //"ESTADO_CONTRATO ESTADO " + 
                "FROM t_contrato@WEBLINK t " + 
                "WHERE 1=1 " + filtro;
            dt = cs.ListarHistorial(sql);

            String resultados = "<h3>Resultados encontrados : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tableResultados");

            return html;
        }

        public String AgregarContratoAction()
        {

            ContratoModel c = new ContratoModel();
            ContratoServices cs = new ContratoServices();

            c.contrato = Request.Form["contrato"];
            c.id = Request.Form["id"];
            c.titulo = Request.Form["titulo"];
            c.descripcion = Request.Form["descripcion"];
            c.proceso = Request.Form["proceso"];
            c.tipo = Request.Form["tipo"];
            c.monto = Request.Form["monto"];
            c.es_contratista = Request.Form["es_contratista"];
            c.contratista = Request.Form["contratista"];
            c.contratista_representante = Request.Form["contratista_representante"];
            c.id_gerencia = Request.Form["id_gerencia"];
            c.administrador = Request.Form["administrador"];
            c.delegado = Request.Form["delegado"];
            c.fecha_suscripcion = Request.Form["fecha_suscripcion"];
            c.fecha_inicio = Request.Form["fecha_inicio"];
            c.fecha_fin = Request.Form["fecha_fin"];
            c.fecha_culminacion = Request.Form["fecha_culminacion"];
            c.resolucion = Request.Form["resolucion"];
            c.fecha_resolucion = Request.Form["fecha_resolucion"];
            c.observacion = Request.Form["observacion"];
            c.id_estado = Request.Form["id_estado"];
            c.fecha_ing = "2013-11-26";
            c.usuario_ing = Request.Form["usuario_ing"];
            
            cs.Agregar(c);

            return "";
        
        }

        public String GuardarFiscalizadorAction()
        {

            FiscalizadorModel a = new FiscalizadorModel();
            ContratoServices cs = new ContratoServices();

            a.contrato = Request.Form["contrato"];
            a.id_tipo = Request.Form["tipo"];
            a.codigo = Request.Form["codigo"];
            a.nombre = Request.Form["nombre"];
            a.fecha_ing = DateTime.Now.ToString();
            a.guid = Guid.NewGuid().ToString();
            a.usuario_ing = "";

            cs.GuardarFiscalizador(a);

            return "";

        }

        public String GuardarActividadAction()
        {

            ActividadModel a = new ActividadModel();
            ContratoServices cs = new ContratoServices();

            a.contrato = Request.Form["contrato"];
            a.descripcion = Request.Form["descripcion"];
            a.fecha_inicio = Request.Form["fecha_inicio"];
            a.fecha_fin = Request.Form["fecha_fin"];
            a.id_estado = Request.Form["id_estado"];
            a.fecha_ing = DateTime.Now.ToString();
            a.guid = Guid.NewGuid().ToString();
            a.usuario_ing = "";

            cs.GuardarActividad(a);

            return "";

        }

        public String GuardarPagoAction()
        {

            PagoModel a = new PagoModel();
            ContratoServices cs = new ContratoServices();

            a.contrato = Request.Form["contrato"];
            a.fecha_entrega = Request.Form["fecha_entrega"];
            a.valor = Request.Form["valor"];
            a.id_forma_pago = Request.Form["id_forma_pago"];
            a.comentario = Request.Form["comentario"];
            a.fecha_ing = DateTime.Now.ToString();
            a.guid = Guid.NewGuid().ToString();
            a.usuario_ing = "";

            cs.GuardarPago(a);

            return "";

        }

        public String GuardarProrrogaAction()
        {

            ProrrogaModel a = new ProrrogaModel();
            ContratoServices cs = new ContratoServices();

            a.contrato = Request.Form["contrato"];
            a.descripcion = Request.Form["descripcion"];
            a.fecha_inicio = Request.Form["fecha_inicio"];
            a.fecha_fin = Request.Form["fecha_fin"];
            a.valor_multa = Request.Form["valor_multa"];
            a.fecha_ing = DateTime.Now.ToString();
            a.guid = Guid.NewGuid().ToString();
            a.usuario_ing = "";

            cs.GuardarProrroga(a);

            return "";

        }

        public String GuardarGarantiaAction()
        {

            GarantiaModel a = new GarantiaModel();
            ContratoServices cs = new ContratoServices();

            a.contrato = Request.Form["contrato"];
            a.descripcion = Request.Form["descripcion"];
            a.tipo = Request.Form["tipo"];
            a.aseguradora = Request.Form["aseguradora"];
            a.monto = Request.Form["monto"];
            a.fecha_inicio = Request.Form["fecha_inicio"];
            a.fecha_fin = Request.Form["fecha_fin"];
            a.id_estado = Request.Form["id_estado"];
            a.fecha_ing = DateTime.Now.ToString();
            a.guid = Guid.NewGuid().ToString();
            a.usuario_ing = "";

            cs.GuardarGarantia(a);

            return "";

        }

        public String ListarCatalogo(String opcion, String catalogo_nombre, String filtro)
        {
            String lista = "";
            ContratoServices cs = new ContratoServices();
            General g = new General();
            ArrayList arr = new ArrayList();
            switch (opcion)
            {
                case "Personal":
                    arr = g.ListarPersonal(filtro);
                    lista = u.ArrayToHtml(arr, "table");
                    break;
                case "Gerencias":
                    arr = cs.ListarGerencias(filtro);
                    lista = u.ArrayToHtml(arr, "table");
                    break;
                case "Catalogos":
                    arr = cs.ListarCatalogos(catalogo_nombre, filtro);
                    lista = u.ArrayToHtml(arr, "option");
                    break;
                case "CGWEB":
                    arr = cs.ListarCatalogosCGWEB(catalogo_nombre, filtro);
                    lista = u.ArrayToHtml(arr, "table");
                    break;
                case "CGWEB_combo":
                    arr = cs.ListarCatalogosCGWEB(catalogo_nombre, filtro);
                    lista = u.ArrayToHtml(arr, "option");
                    break;
                default:
                    lista = "";
                    break;
            }
            
            return lista;
        }

        public ActionResult EliminarContratos()
        {
            String contrato = Request.Form["contrato"];
            ContratoServices cs = new ContratoServices();
            cs.Eliminar(contrato);
            return RedirectToAction("ListadoContratos");
        }

    }
}
